Contents

很多时候我们 UI 效果上会显示一些小圆圈的圆周或者实心圆以及一些 tag 样式带有五颜六色的 view。可以用 UIImageView来把切图放上去,也可以用普通的 UIView 画出来,后者明显在美观程度上会更好。比如我们需要在 Cell 上摆放一个小圆

UIView *view = [[UIView alloc] initWithFrame:CGRectMake(20, 20)];
view.cornerRadius  = 10.f;
view.layer.masksToBounds = YES;
view.backgroundColor     = [UIColor redColor];

[cell.contentView addSubview:view];

类似于图中的小圆圈

如果不加其他处理的话,这样纯画出来的控件就会出现 Cell 被高亮或者被点击选择这种 view 会“消失”的问题。这是因为 Cell 在上述情况下被自动改变 content 里所有 view 的 background color [①][refer]

####0x00
要解决这个问题,必须在 Cell 的 class 里面复写父类的两个方法

- (void)setSelected:(BOOL)selected animated:(BOOL)animated {
       UIColor *color = self.view.backgroundColor;//取出 view 的颜色        
       [super setSelected:selected animated:animated];

    if (selected){
        self.view.backgroundColor = color;
    }
}

-(void)setHighlighted:(BOOL)highlighted animated:(BOOL)animated{
    UIColor *color = self.view.backgroundColor;        
    [super setHighlighted:highlighted animated:animated];

    if (highlighted){
        self.view.backgroundColor = color;
    }
}

成功之后的效果如图

####0x01
另一种方法
把 Cell 的 UITableViewCellSelectionStyle 设置成 UITableViewCellSelectionStyleNone 也是可以的,但是这样相当于直接禁用了 select 高亮效果,操作体验不是特别好不建议使用。
[refer]:http://stackoverflow.com/questions/6745919/uitableviewcell-subview-disappears-when-cell-is-selected

Contents